package org.tomdz.storm.esper; import java.lang.String; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import backtype.storm.spout.ISpout; import backtype.storm.task.IBolt; import backtype.storm.topology.BoltDeclarer; import backtype.storm.generated.StormTopology; import backtype.storm.topology.IRichBolt; import backtype.storm.topology.IRichSpout; import backtype.storm.topology.InputDeclarer; import backtype.storm.topology.TopologyBuilder; public class TestTopologyBuilder { private final Map<String, IRichSpout> spoutMap = new HashMap<String, IRichSpout>(); private final Map<String, IRichBolt> boltMap = new HashMap<String, IRichBolt>(); private final Map<String, List<Connection>> connections = new HashMap<String, List<Connection>>(); public TestTopologyBuilder addSpout(String name, IRichSpout spout) { spoutMap.put(name, spout); return this; } public TestTopologyBuilder addBolt(String name, IRichBolt bolt) { boltMap.put(name, bolt); return this; } public IRichBolt getBolt(String name) { return boltMap.get(name); } public TestTopologyBuilder connect(String sourceComponent, String targetComponent) { return connect(sourceComponent, "default", targetComponent); } public TestTopologyBuilder connect(String sourceComponent, String sourceStream, String targetComponent) { List<Connection> connectionsForTarget = connections.get(targetComponent); if (connectionsForTarget == null) { connectionsForTarget = new ArrayList<Connection>(); connections.put(targetComponent, connectionsForTarget); } connectionsForTarget.add(new Connection(sourceComponent, sourceStream, targetComponent)); return this; } public StormTopology build() { final TopologyBuilder builder = new TopologyBuilder(); for (Map.Entry<String, IRichSpout> spoutEntry : spoutMap.entrySet()) { builder.setSpout(spoutEntry.getKey(), spoutEntry.getValue()); } for (Map.Entry<String, IRichBolt> boltEntry : boltMap.entrySet()) { InputDeclarer declarer = builder.setBolt(boltEntry.getKey(), boltEntry.getValue()); List<Connection> connectionsForTarget = connections.get(boltEntry.getKey()); if (connectionsForTarget != null) { for (Connection connection : connectionsForTarget) { declarer = declarer.shuffleGrouping(connection.getSourceComponent(), connection.getSourceStream()); } } } return builder.createTopology(); } }